/**微信JS支付*/
top.wc_pay = {
	config:{
		"appId": "",
		"appKey": "",
		"partnerID": "",
		"partnerKey": "",
		"name": "",
		"orderNo": "",
		"totalFee": "",
		"notifyUrl":"",
		"cid":""
	},
	pay:function(){
		WeixinJSBridge.invoke('getBrandWCPayRequest',{
             "appId" : getAppId(), //公众号名称，由商户传入
             "timeStamp" : getTimeStamp(), //时间戳
             "nonceStr" : getNonceStr(), //随机串
             "package" : getPackage(),//扩展包
             "signType" : getSignType(), //微信签名方式:1.sha1
             "paySign" : getSign() //微信签名
             },function(res){
            	 // get_brand_wcpay_request:ok 表示该用户已经完成支付！
	        	 if(res.err_msg == "get_brand_wcpay_request:ok" ) {
	        		 window.localStorage.cart = "[]";
	        		 //location.href = "./user/backend?cid=" + top.wc_pay.config.cid +"#mp.weixin.qq.com"; 
	        		 location.href = "./wcpay/requestOK?orderId=" + top.wc_pay.config.orderNo + "&cid=" + top.wc_pay.config.cid +"#mp.weixin.qq.com";
	        	 } else if(res.err_msg == "get_brand_wcpay_request:cancel"){
	        		 alert("用户取消支付，支付未成功！");
	        		 location.href = "./user/backend?cid=" + top.wc_pay.config.cid +"#mp.weixin.qq.com";
	        	 } else {
	        		 alert("支付出错，错误信息：" + res.err_msg);
	        		 location.href = "./user/backend?cid=" + top.wc_pay.config.cid +"#mp.weixin.qq.com";
	        	 }
         });
	}
};

function getAppId()
{
    return top.wc_pay.config.appId;
}

function getAppKey(){
	return top.wc_pay.config.appKey;
}

//以下是package组包过程：
var oldPackageString;
function getPartnerId()
{
    return top.wc_pay.config.partnerID;
}

function getPartnerKey()
{
	return top.wc_pay.config.partnerKey;
}

function getPackage()
{
    var banktype = "WX";
    var body = top.wc_pay.config.name;//商品名称信息
    var fee_type = "1";//费用类型，这里1为默认的人民币
    var input_charset = "GBK";//字符集，这里将统一使用GBK
    var notify_url = top.wc_pay.config.notifyUrl;//支付成功后将通知该地址
    var out_trade_no = top.wc_pay.config.orderNo;//订单号，商户需要保证该字段对于本商户的唯一性
    var partner = getPartnerId();//商户号
    var spbill_create_ip = "127.0.0.1";//用户浏览器的ip，这个需要在前端获取。这里使用127.0.0.1测试值
    var total_fee = top.wc_pay.config.totalFee;//总金额。
    var partnerKey = getPartnerKey();//这个值和以上其他值不一样是：签名需要它，而最后组成的传输字符串不能含有它。这个key是需要商户好好保存的。
     
    //首先第一步：对原串进行签名，注意这里不要对任何字段进行编码。这里是将参数按照key=value进行字典排序后组成下面的字符串,在这个字符串最后拼接上key=XXXX。由于这里的字段固定，因此只需要按照这个顺序进行排序即可。
    var signString = "bank_type="+banktype+"&body="+body+"&fee_type="+fee_type+"&input_charset="+input_charset+"&notify_url="+notify_url+"&out_trade_no="+out_trade_no+"&partner="+partner+"&spbill_create_ip="+spbill_create_ip+"&total_fee="+total_fee+"&key="+partnerKey;
    var md5SignValue =  ("" + CryptoJS.MD5(signString)).toUpperCase();
    //然后第二步，对每个参数进行url转码，如果您的程序是用js，那么需要使用encodeURIComponent函数进行编码。
     
    banktype = encodeURIComponent(banktype);
    body=encodeURIComponent(body);
    fee_type=encodeURIComponent(fee_type);
    input_charset = encodeURIComponent(input_charset);
    notify_url = encodeURIComponent(notify_url);
    out_trade_no = encodeURIComponent(out_trade_no);
    partner = encodeURIComponent(partner);
    spbill_create_ip = encodeURIComponent(spbill_create_ip);
    total_fee = encodeURIComponent(total_fee);
     
    //然后进行最后一步，这里按照key＝value除了sign外进行字典序排序后组成下列的字符串,最后再串接sign=value
    var completeString = "bank_type="+banktype+"&body="+body+"&fee_type="+fee_type+"&input_charset="+input_charset+"&notify_url="+notify_url+"&out_trade_no="+out_trade_no+"&partner="+partner+"&spbill_create_ip="+spbill_create_ip+"&total_fee="+total_fee;
    completeString = completeString + "&sign="+md5SignValue;
     
    oldPackageString = completeString;//记住package，方便最后进行整体签名时取用
     
    return completeString;
}

//下面是app进行签名的操作：
var oldTimeStamp ;//记住timestamp，避免签名时的timestamp与传入的timestamp时不一致
var oldNonceStr ; //记住nonceStr,避免签名时的nonceStr与传入的nonceStr不一致
function getTimeStamp()
{
    var timestamp=new Date().getTime();
    var timestampstring = timestamp.toString();//一定要转换字符串
    oldTimeStamp = timestampstring;
    return timestampstring;
}

function getNonceStr()
{
    var $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var maxPos = $chars.length;
    var noceStr = "";
    for (var i = 0; i < 32; i++) {
        noceStr += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    oldNonceStr = noceStr;
    return noceStr;
}

function getSignType()
{
    return "SHA1";
}

function getSign()
{
    var app_id = getAppId();
    var app_key = getAppKey();
    var nonce_str = oldNonceStr;
    var package_string = oldPackageString;
    var time_stamp = oldTimeStamp;
    //第一步，对所有需要传入的参数加上appkey作一次key＝value字典序的排序
    var keyvaluestring = "appid="+app_id+"&appkey="+app_key+"&noncestr="+nonce_str+"&package="+package_string+"&timestamp="+time_stamp;
    sign = CryptoJS.SHA1(keyvaluestring).toString();
    return sign;
}